package tree;

//二叉查找树（二叉搜索数/二叉排序树）
//性质：左树的所有值均小于根节点的值，右树的所有值均大于根节点的值
public class BinarySearchTree {

    class BSTNode{

        private Number num;
        private BSTNode left;
        private BSTNode right;

        BSTNode(Number num){
            this.num = num;
        }

        public Number getNum() {
            return num;
        }

        public void setNum(Number num) {
            this.num = num;
        }

        public BSTNode getLeft() {
            return left;
        }

        public void setLeft(BSTNode left) {
            this.left = left;
        }

        public BSTNode getRight() {
            return right;
        }

        public void setRight(BSTNode right) {
            this.right = right;
        }
    }

    private BSTNode root;
    private int size = 0;

    public int size(){
        return size;
    }

    public boolean add(int key){

        return true;
    }

    //将num创建BSTNode后，连接到与node相比合适的位置
    private BSTNode linkNode(BSTNode node, Number num){
        BSTNode newNode = new BSTNode(num);
        if (node==null){
            node = newNode;
        } else {
            Number nodeNum = node.getNum();
            if (nodeNum.doubleValue()>num.doubleValue()){
                linkNode(node.left, num);
            } else {
                linkNode(node.right, num);
            }
        }

        return node;
    }

    public boolean deleteNode(int key){
        //1、先查找到要删除的节点

        //2.1、如果该节点是叶子节点：直接删除即可

        //2.2、如果该节点只有左子树或只有右子树：直接把子树设为父节点的子树（视被删除的节点是左子树还是右子树决定左右）

        //2.3、如果该节点拥有左右子树：

        return true;
    }

    public static void main(String[] args){



    }

}
